如何使用 Oracle Solaris 11 网络虚拟化和资源管理限制应用程序流量

2011 年 11 月

作者:Duncan Hardie

如何使用 Oracle Solaris 11 网络资源管理直接对数据链路(如 VNIC)或用户定义的 应用带宽限制。对数据链路应用带宽限制会影响所有网络流量,让您可以控制应用程序之间共享带宽的方式,而通过定义流,您可以基于数据包属性(如 IP 地址或传输协议)限制特定类型的流量。


简介

本文介绍如何使用 Oracle Solaris 11 中新增的网络资源管理来控制网络流量基础架构。您将了解如何对数据链路使用带宽控制在各个应用程序之间共享网络带宽,同时防止行为不当的应用程序独占全部网络带宽。您还将了解,流可以控制特定网络流量的带宽,举例来说,可以限制每周备份对系统的影响。

OTN 旨在帮助您充分熟悉 Oracle 技术以便作出明智的决策。提供文章、软件下载、文档等。立即加入以获取完成工作所需的技术资源。

一如继往,网络是数据中心的核心。能够轻松地监视、控制、保证和重新配置网络基础架构对于为应用程序提供所需的数据连接至关重要。为满足数据中心实施日益增长的需求,Oracle Solaris 11 提供了一种可靠、安全、可伸缩的基础架构。

特别是,随着网络虚拟化的引入,Oracle Solaris 11 提供了创新的网络资源管理功能来提供前所未有的高级控制,从划分大型网络管道或控制特定网络流量对系统的影响,直至在云或数据中心中运行应用程序。

实施环境概述

新的 Oracle Solaris 11 网络架构(也称为 Crossbow 项目)在操作系统中引入了网络虚拟化和网络资源控制的思想。这种新的网络架构内置于 Oracle Solaris 11 中,可在 Oracle Solaris 11 环境中运行。

在本方法指南中,我们将分析一个示例场景,其中有一个使用单一网络连接的系统,我们需要在三个不同的虚拟应用程序环境中分配该网络连接。我们结合使用网络虚拟化和 Oracle Solaris 区域(内置的操作系统虚拟化)对该系统进行配置,以确保关键应用程序能够获得所需的网络带宽,同时限制较低优选级的流量。

我们将为面向 Web 的应用程序创建两个 Oracle Solaris 区域(webzone-1webzone-2),它们将执行运行 Web 服务器应用程序系统以支持一种在线采购工具的大部分工作。显然,webzone-1webzone-2 对于业务至关重要,需要获得大部分共享网络带宽。

此外,还有一个 Oracle Solaris 区域 backupzone,用于容纳备份软件并每月运行一次该软件。尽管该功能是必需的,但确保备份操作不会影响 webzone-2 网络流量非常重要。所有这些将通过结合使用 Oracle Solaris 区域、虚拟 NIC (VNIC) 和网络带宽控制来实现。

通过网络带宽控制,您可以限制可占用的带宽。可以通过以下两种方式来应用这种带宽限制:

  • 直接应用于数据链路(如 VNIC)
  • 应用于用户定义的流

对数据链路的带宽控制限制通常应用于 VNIC,可减少该 VNIC 的最大带宽。所应用的带宽限制还限定了该 VNIC 的虚拟链路速度。例如,可以使用此方法让 10 GB 网络连接上的一个 VNIC 只能占用 10% 的带宽,表现得就像一个 1 GB 连接,然后可以让其他 VNIC(及其所连接的应用程序)共享剩余带宽。通常用这种方法来拆分大型聚合网络管道,或防止特定应用程序或区域占用全部网络带宽以至妨碍系统中其余的应用程序。

这种方法是将一条数据链路虚拟化为多个 VNIC,让这些 VNIC 工作于已配置的虚拟链路速度下;与此不同的是另一种方法,即用流基于属性 对数据包进行分类然后控制如何使用资源来处理这些数据包。属性基于数据包头中的信息,可以为以下内容之一:

  • IP 地址
  • 传输协议名(UDP、TCP 或 SCTP)
  • 应用程序端口号,如 FTP 端口 21
  • DS 字段属性(仅 IPv6 数据包)

这意味着,与限制数据链路(这会影响所有流量)不同,您可以选择仅限制特定类型的流量。例如,您可能希望限制系统上的 FTP 流量以保护其他网络流量,也可能希望限制到备份服务器的流量。图 1 使用 IP 地址属性限制到备份服务器的网络带宽来阐释了这一概念。

图 1

图 1. 限制到备份服务器的流量的流控制

在图 1 所示的配置下,您的备份仍能完成,但该配置会防止备份操作显著影响网络上的其他流量。

完成本文中的过程之后,您将有三个经过网络资源管理配置的 Oracle Solaris 区域,如图 2 所示。

图 2

图 2. 三个区域及其关联的 VNIC 和网络资源控制

对于 webzone-1,将对其 VNIC 使用带宽控制以确保该区域可以访问的最大带宽 (maxbw) 为 400 Mb,从而为该区域分配物理数据链路(网络端口 e1000g0)连接的相当一部分带宽。对于 webzone-2 同样如此。对于 backupzone,将对其 VNIC 设置 200 Mb 的限制,因为备份数据不如 Web 流量重要。此外,将从 webzone-2backupzone 的通信流限制为 50 Mb,因为我们不希望每周一次的备份显著影响到 webzone-2

:有关对虚拟网络及其配置和管理的更深入的说明,请参见 Oracle Solaris 管理:网络接口和网络虚拟化。有关 Oracle Solaris 区域的全面讨论,请参见 Oracle Solaris 管理:Oracle Solaris 区域、Oracle Solaris 10 区域和资源管理

开始之前

我们来查看网络和 Oracle Solaris 区域配置的状态,如清单 1 所示,以便了解稍后将要进行的更改。

清单 1:查看当前配置
root@global:~# dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
e1000g0           Ethernet             up         1000   full      e1000g0
e1000g1           Ethernet             unknown    0      unknown   e1000g1
root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --
root@global:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
e1000g0/_a        static   ok           10.134.79.168/24
lo0/v6            static   ok           ::1/128
root@global:~# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared

我们使用了三个不同的命令来收集一些基本信息。ipadm 命令是 Oracle Solaris 11 中新增的,dladm 则得到了明显改进。

我们可以使用 dladm 命令来查看和管理数据链路层。在本例中,我们使用了 show-phys 选项,可以看到有两个物理网络设备(e1000g0e1000g1),其中只有一个已启动并配置,其链路速度为 1 G。我们还使用了 show-link 选项来查看以确定没有其他额外的链路。

作为对比,来看看 ipadm 命令,我们可以使用这个命令来查看和管理 IP 层。在清单 1 中可以看到,e1000g0 设备已启动并配置了静态 IP 地址 10.134.79.168。还有两个网络环回设备,每个分别用于 IPv4 和 IPv6。

最后,我们可以使用 zoneadm 命令来查看 Oracle Solaris 区域信息。在清单 1 中可以看到,只配置了一个区域实例,即全局区域。全局区域是特殊的 Oracle Solaris 区域。它既是系统的默认区域,又是用于系统级管理控制的区域。

创建第一个区域 (webzone-1)

Oracle Solaris 区域是 Oracle Solaris 中提供的内置虚拟化技术。在本场景中,我们将使用这些区域来容纳不同的环境。本文不讨论创建 Oracle Solaris 区域的细节。有关如何创建 Oracle Solaris 区域的信息,请参见“如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域”。

首先使用 zonecfg 创建第一个区域 webzone-1。创建区域至少需要该区域的名称及其 zonepath。

root@global:~# zonecfg -z webzone-1
webzone-1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:webzone-1> create
create: Using system default template 'SYSdefault'
zonecfg:webzone-1> set zonepath=/zones/webzone-1

默认情况下,Oracle Solaris 区域配置有一个名为 anet 的自动 VNIC。在 zonecfg 环境中使用 info 选项即可看到这个 VNIC,如清单 2 所示。稍后我们将对这个 VNIC 设置带宽控制。

清单 2:查看默认 VNIC
zonecfg:webzone-1> info
zonename: webzone-1
zonepath: /zones/webzone-1
brand: solaris
autoboot: false
bootargs: 
file-mac-profile: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: exclusive
hostid: 
fs-allowed: 
anet:
	linkname: net0
	lower-link: auto
	allowed-address not specified
	configure-allowed-address: true
	defrouter not specified
	allowed-dhcp-cids not specified
	link-protection: mac-nospoof
	mac-address: random
	mac-prefix not specified
	mac-slot not specified
	vlan-id not specified
	priority not specified
	rxrings not specified
	txrings not specified
	mtu not specified
	maxbw not specified
	rxfanout not specified

可以看到,该链路将称作 net0,并将自动使用其下层物理数据链路。

最后,验证区域配置是否正确,提交该配置,然后退出该区域:
zonecfg:webzone-1> verify
zonecfg:webzone-1> commit
zonecfg:webzone-1> exit

下一步我们来安装该区域,如清单 3 所示。我们需要访问映像包管理系统 (IPS) 信息库以安装区域。

清单 3:安装区域
root@global:~# zoneadm -z webzone-1 install
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111020T102419Z.webzone-1.install
       Image: Preparing at /zones/webzone-1/root.

 Install Log: /system/volatile/install.8658/install_log
 AI Manifest: /tmp/manifest.xml.XSaa5q
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: webzone-1
Installation: Starting ...

              Creating IPS image
              Installing packages from:
                  solaris
                      origin:  http://ipkg.us.oracle.com/solaris11/dev/
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              167/167 32062/32062  175.8/175.8

PHASE                                        ACTIONS
Install Phase                            44311/44311 

PHASE                                          ITEMS
Package State Update Phase                   167/167 
Image State Update Phase                         2/2 
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 108.653 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /zones/webzone-1/root/var/log/zones/zoneadm.20111020T102419Z.webzone-1.install

最后,启动该区域并使用 System Configuration Tool 指定其系统配置。有关如何执行此操作的详细信息,请参见“如何使用 sysconfig 命令配置 Oracle Solaris 11”“如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域”

root@global:~# zoneadm -z webzone-1 boot; zlogin -C webzone-1

当您完成 System Configuration Tool 中的一组交互式屏幕时,请指定以下信息:

  • Computer Name:webzone-1
  • Network connection configured:Manually
  • IP address:10.134.79.241
  • Default router:10.134.79.1
  • DNS Name Service:Do not configure DNS
  • Alternative Name Service:None
  • Time zone Region:Europe
  • Time Zone Location:Britain (UK)
  • Time Zone:GB

另外,指定 root 口令并通过指定用户名和用户口令创建一个用户帐户。

完成后,会看到该区域继续启动。在看到区域控制台登录提示符后,使用“~.”转义序列退出区域控制台环境,如清单 4 所示。

清单 4:退出区域
Exiting System Configuration Tool. Log is available at:
/var/tmp/install/sysconfig.log
Hostname: webzone-1
Oct 20 11:38:49 webzone-1 sendmail[10870]: My unqualified host name (webzone-1) unknown; sleeping for retry
Oct 20 11:38:49 webzone-1 sendmail[10874]: My unqualified host name (webzone-1) unknown; sleeping for retry

webzone-1 console login: 
webzone-1 console login: ~.
[Connection to zone 'webzone-1' console closed]

可以使用 zoneadm 命令查看新创建的 webzone-1 的状态:

root@global:~# zoneadm list -v
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
  11 webzone-1        running    /zones/webzone-1               solaris  excl  

先了解一下网络情况

现在 webzone-1 已启动运行,下面来看看这对于网络意味着什么以及刚创建的自动 VNIC:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --
webzone-1/net0      vnic      1500   up       e1000g0
root@global:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webzone-1/net0      e1000g0      1000   2:8:20:7a:7b:f    random            0

show-linkshow-vnic 选项均显示已经自动为 webzone-1 创建 VNIC net0,且两个命令均显示与该 VNIC 关联的区域的名称已经附加到链路名称后面。

下面使用 zlogin 命令登录 webzone-1 来看看那里有些什么,如清单 5 所示。

清单 5:登录区域
root@global:~# zlogin webzone-1
[Connected to zone 'webzone-1' pts/3]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@webzone-1:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           10.134.79.241/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fe7a:7b0f/10
root@webzone-1:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                vnic      1500   up       ?
root@webzone-1:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
net0                ?            1000   2:8:20:7a:7b:f    random            0
root@webzone-1:~# ping 10.134.79.1
10.134.79.1 is alive
root@webzone-1:~# exit
logout

[Connection to zone 'webzone-1' pts/3 closed]

如清单 5 所示,已经针对该区域的自动 VNIC 配置了 IP 地址。尽管可以使用 dladm 命令查看 VNIC 信息,但要注意,从该区域内部看不到全局区域网络信息的其余部分。最后,ping 默认路由器以确保网络工作正常,然后退出该区域。

配置另外两个 Oracle Solaris 区域

现在来配置 webzone-2backupzone。因为区域非常容易配置,且默认情况下会为每个区域创建一个自动 VNIC,所以只需几条命令即可完成此任务。这次,我们将所需参数直接传递给 zonecfg,而不使用交互式方法:

root@global:~# zonecfg -z webzone-2 "create; set zonepath=/zones/webzone-2"
root@global:~# zonecfg -z backupzone "create; set zonepath=/zones/backupzone"


root@global:~# zoneadm -z webzone-2 install
(output omitted)

root@global:~# zoneadm -z backupzone install
(output omitted)

记住在通过 System Configuration Tool 流程时设置正确的 IP 地址。(若想查看要添加的其他详细信息,请参见创建第一个区域 (webzone-1)。)

  • 对于 webzone-2,使用 IP 地址 10.134.79.242。
  • 对于 backupzone,使用 IP 地址 10.134.79.243。

从全局区域查看是否已为新建区域添加了相应的自动 VNIC:

root@global:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webzone-1/net0      e1000g0      1000   2:8:20:7a:7b:f    random            0
webzone-2/net0      e1000g0      1000   2:8:20:5e:ed:38   random            0
backupzone/net0     e1000g0      1000   2:8:20:45:47:17   random            0

可以看到,现在每个区域都有一个 VNIC 与其相关联。

向数据链路添加带宽控制

到目前为止,尚未对这些 VNIC 添加任何带宽控制。我们来看看怎样快速、轻松地控制网络流量。

:在本节中,将使用 netperf 工具来模拟网络负载。有关如何获得 netperf 的信息,请参见 The Observatory 博客

无带宽控制

开始之前,我们先来分析一下系统的当前状态,以便了解稍后应用带宽限制时的效果。首先在 webzone-1webzone-2 之间发送网络流量。

:因为 webzone-1webzone-2 的 VNIC 都在相同的虚拟交换机上(参见图 2),这两个区域之间的流量将流过虚拟交换机但从不离开系统。这样可以提供良好的性能。

我们需要 netserver 运行在目标系统上以便 netperf 可以正常工作,因此首先访问 webzone-2,查看 IP 地址,然后启动 netserver,如清单 6 所示。

清单 6:启动 netserver
root@global:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-2:~# cd /shared/Netperf
root@webzone-2:/shared/Netperf# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
wz2_vnic0/v4      static   ok           10.134.79.242/24
lo0/v6            static   ok           ::1/128
wz2_vnic0/v6      addrconf ok           fe80::8:20ff:feb1:e2f5/10
root@webzone-2:/shared/Netperf# ./netserver
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC
root@webzone-2:/shared/Netperf# exit
logout

[Connection to zone 'webzone-2' pts/5 closed]

现在,在 webzone-1 中,检查是否可以 ping 通 webzone-2,然后启动 netperf 测试,如清单 7 所示。

清单 7:启动 netperf
root@global:~# zlogin webzone-1
[Connected to zone 'webzone-1' pts/3]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@webzone-1:~# cd /shared/Netperf/
root@webzone-1:/shared/Netperf# ping 10.134.79.242
10.134.79.242 is alive
root@webzone-1:/shared/Netperf# ./netperf -H 10.134.79.242
MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.242 (10.134.79.242) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

128000  49152  49152    9.99     3950.60   
root@webzone-1:/shared/Netperf# exit
logout

[Connection to zone 'webzone-1' pts/5 closed]

可以看到,吞吐量是 3950 Mb/秒。一个有趣的额外收获是,此值说明将应用程序并列放在同一个系统上各自的 Oracle Solaris 区域中(而不是让这些应用程序分置于不同的系统上)有一个很大的好处。网络流量无需离开系统进入网络,这意味着,与具有 1 Gb 物理网络连接的系统相比(举例来说),您可以实现非常高的吞吐量和非常低的延迟。

添加带宽控制并重新测试

现在添加第一个带宽控制。我们的控制对象是与 webzone-1 关联的 VNIC net0。从全局区域查看当前状态,可以看到尚未应用任何带宽限制。

root@global:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webzone-1/net0      e1000g0      1000   2:8:20:7a:7b:f    random            0
webzone-2/net0      e1000g0      1000   2:8:20:5e:ed:38   random            0
backupzone/net0     e1000g0      1000   2:8:20:45:47:17   random            0

还可以单独查看 webzone-1 上的 net0maxbw(最大带宽)属性:

root@global:~# dladm show-linkprop -p maxbw webzone-1/net0
LINK     PROPERTY        PERM VALUE          DEFAULT  POSSIBLE
webzone-1/net0 maxbw     rw   --             --             -- 

我们将带宽设置为 400 Mb/秒,如图 2 所示。为此我们使用 zonecfg,如清单 8 所示,使得该带宽限制持久存在,在每次 webzone-1 重新启动后都有效。

清单 8:设置 webzone-1 的带宽
root@global:~# zonecfg -z webzone-1
zonecfg:webzone-1> select anet linkname=net0
zonecfg:webzone-1:anet> set maxbw=400M
zonecfg:webzone-1:anet> end
zonecfg:webzone-1> verify
zonecfg:webzone-1> commit
zonecfg:webzone-1> exit
root@global:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webzone-1/net0      e1000g0      1000   2:8:20:7a:7b:f    random            0
webzone-2/net0      e1000g0      1000   2:8:20:5e:ed:38   random            0
backupzone/net0     e1000g0      1000   2:8:20:45:47:17   random            0

可以看到,该带宽限制未得到动态应用,因此需要重新启动 webzone-1

root@global:~# zoneadm -z webzone-1 shutdown
root@global:~# zoneadm -z webzone-1 boot
root@global:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webzone-2/net0      e1000g0      1000   2:8:20:5e:ed:38   random            0
backupzone/net0     e1000g0      1000   2:8:20:45:47:17   random            0
webzone-1/net0      e1000g0      400    2:8:20:7a:7b:f    random            0

:还可以通过从全局区域使用 dladm 设置 webzone-1/net0 上的 maxbw 属性来设置对 webzone-1 VNIC 的限制,无需重新启动区域。在 webzone-1 重新启动之前该设置将一直有效,重新启动后 webzone-1 配置会重新生效。

现在可以看到,因为应用了带宽限制,webzone-1/net0 的虚拟链路速度为 400 Mb。

再次重复 netperf 测试并查看结果。我们没有停止 webzone-2 中的 netserver,这样只需在 webzone-1 中重新运行测试的客户端,如清单 9 所示。

清单 9:重复 netperf 测试
root@global:~# zlogin webzone-1
[Connected to zone 'webzone-1' pts/3]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@webzone-1:~# cd /shared/Netperf/
root@webzone-1:/shared/Netperf# ./netperf -H 10.134.79.242
MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.242 (10.134.79.242) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

128000  49152  49152    10.03     425.17   
root@webzone-1:/shared/Netperf# exit
logout

[Connection to zone 'webzone-1' pts/3 closed]

我们已经成功将进入 webzone-1 的所有流量的吞吐量限制为 400 Mb/秒。

:我们检查了系统内区域到区域的带宽限制,但此限制也适用于进出 webzone-1 的所有流量,包括来自系统外部的流量。

向其他 VNIC 添加带宽限制

我们通过向系统上的其他 VNIC 添加 maxbw 限制来完成带宽限制任务。如图 2 中所见,需要将 webzone-2maxbw 设置为 400 Mb,并将 backupzonemaxbw 设置为 200 Mb。这是模拟将 1 Gb 的物理链路拆分为较小的虚拟链路。为此,再次从全局区域使用 zonecfg 并重新启动每个区域以使更改生效,如清单 10 所示。

清单 10:对其他区域设置带宽限制
root@dcsw-79-168:~# zonecfg -z webzone-2
zonecfg:webzone-2> select anet linkname=net0
zonecfg:webzone-2:anet> set maxbw=400M
zonecfg:webzone-2:anet> end
zonecfg:webzone-2> verify
zonecfg:webzone-2> commit
zonecfg:webzone-2> exit
root@dcsw-79-168:~# zoneadm -z webzone-2 shutdown
root@dcsw-79-168:~# zoneadm -z webzone-2 boot

root@dcsw-79-168:~# zonecfg -z backupzone
zonecfg:backupzone> select anet linkname=net0
zonecfg:backupzone:anet> set maxbw=200M
zonecfg:backupzone:anet> end
zonecfg:backupzone> verify
zonecfg:backupzone> commit
zonecfg:backupzone> exit
root@dcsw-79-168:~# zoneadm -z backupzone shutdown
root@dcsw-79-168:~# zoneadm -z backupzone boot

可以使用 dladm 命令检查更改是否已经实现。

root@dcsw-79-168:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
webzone-1/net0      e1000g0      400    2:8:20:96:dc:ef   random            0
webzone-2/net0      e1000g0      400    2:8:20:59:e8:e5   random            0
backupzone/net0     e1000g0      200    2:8:20:8:a6:71    random            0

我们来看看当存在两个带宽限制时会发生什么情况。为此,可以观察 webzone-2backupzone 之间的吞吐量。因为重新启动了区域,我们首先需要在 webzone-2 中再次重新启动 netserver。然后可以登录 backupzone 并从该处运行测试,如清单 11 所示。

清单 11:查看带宽限制
root@dcsw-79-168:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-2:~# cd /shared/Netperf/
root@webzone-2:/shared/Netperf# ./netserver 
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC
root@webzone-2:/shared/Netperf# exit
logout

[Connection to zone 'webzone-2' pts/5 closed]
root@dcsw-79-168:~# zlogin backupzone
[Connected to zone 'backupzone' pts/5]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@backupzone:~# cd /shared/Netperf/
root@backupzone:/shared/Netperf# ./netperf -H 10.134.79.242
MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.242 (10.134.79.242) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

128000  49152  49152    10.02     209.85   
root@backupzone:/shared/Netperf# exit
logout

[Connection to zone 'backupzone' pts/5 closed]

毫不奇怪,我们可以看到 webzone-2backupzone 的两个带宽限制中的较小者得到应用,因此吞吐量为 200 Mb/秒。

现在停止 webzone-2 中的 netserver,如清单 12 所示。

清单 12:停止 netserver
root@global:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-2:/shared/Netperf# ps -ef | grep netserver
    root 24119 24005   0 15:11:52 pts/5       0:00 grep netserver
    root 24013 21495   0 13:12:24 ?           0:00 ./netserver
root@webzone-2:/shared/Netperf# kill 24013
root@webzone-2:/shared/Netperf# ps -ef | grep netserver
    root 24126 24005   0 15:12:58 pts/5       0:00 grep netserver
root@webzone-2:/shared/Netperf# exit
logout

[Connection to zone 'webzone-2' pts/5 closed]

添加流控制

数据链路上的带宽限制会影响流经某个 VNIC(举例来说)的所有流量,而对流应用带宽限制让我们可以基于网络数据包属性限制流量。在本例中,我们探讨如何使用 IP 地址属性来限制 webzone-2backupzone 之间的流量。

在本文前面使用的设置中,我们从全局区域应用资源控制,而这次我们将从 Oracle Solaris 区域内部应用资源控制。这体现了网络资源控制的灵活性。您既可以在全局区域级别又可以在非全局区域级别应用控制,即,管理员对系统拥有完全控制,而区域用户对自己的区域拥有完全控制。

无流控制

首先我们快速检查一下 webzone-2backupzone 之间的性能。这次我们在 backupzone 中启动 netserver,如清单 13 所示。

清单 13:在 backupzone 中启动 netserver
root@global:~# zlogin backupzone
[Connected to zone 'backupzone' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@backupzone:~# cd /shared/Netperf/
root@backupzone:/shared/Netperf# ./netserver
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC
root@backupzone:/shared/Netperf# exit
logout

[Connection to zone 'backupzone' pts/5 closed]

webzone-2 中运行 netperf 测试,如清单 14 所示。

清单 14:在 webzone-2 中启动 netperf
root@dcsw-79-168:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-2:~# cd /shared/Netperf/
root@webzone-2:/shared/Netperf# ./netperf -H 10.134.79.243
MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.243 (10.134.79.243) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

128000  49152  49152    10.16     199.33   
root@webzone-2:/shared/Netperf# exit
logout

[Connection to zone 'webzone-2' pts/5 closed]

可以看到,VNIC 上的带宽限制仍然存在,所得吞吐量为 200 Mb/秒。

backupzone 中添加流控制并重新测试

现在来应用流控制,如上所述。这里我们不需要对所有流量应用带宽限制,只需要限制 webserver-2backupzone 之间的通信流。我们将使用 flowadm 命令和 IP 地址属性 remote_ip,我们可以通过这个属性输入一个远程 IP 地址作为命令生效所依据的属性值。这将在 backupzone 中围绕进出 webzone-2 的流量创建一个流。

root@dcsw-79-168:~# zlogin backupzone
[Connected to zone 'backupzone' pts/5]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@backupzone:~# flowadm show-flow
root@backupzone:~# flowadm add-flow -l net0 -a remote_ip=10.134.79.242 webzone-2-flow
root@backupzone:~# flowadm show-flow
FLOW        LINK                IPADDR                   PROTO  LPORT   RPORT   DSFLD
webzone-2-flow net0             RMT:10.134.79.242/32     --     --      --      --

关键命令为 flowadm add-flow。我们告诉该命令将其应用于哪个链路 (net0)、其生效所依据的属性 (remote_ip)、该属性的值(webzone-2 的 IP 地址),以及最后,流本身的名称 (webzone-2-flow)。

我们已经创建了流,但还没有对流施以限制。现在我们将 maxbw(最大带宽)设置为 50 Mb。我们使用 show-flowprop 选项来查看可以设置哪些属性,然后使用 set-flowprop 选项来实际设置 maxbw

root@backupzone:~# flowadm show-flowprop
FLOW         PROPERTY        VALUE          DEFAULT        POSSIBLE
webzone-2-flow maxbw         --             --             -- 
root@backupzone:~# flowadm set-flowprop -p maxbw=50 webzone-2-flow
root@backupzone:~# flowadm show-flowprop
FLOW         PROPERTY        VALUE          DEFAULT        POSSIBLE
webzone-2-flow maxbw            50          --             -- 
root@backupzone:~# exit
logout

[Connection to zone 'backupzone' pts/5 closed]

您还可以从全局区域查看新创建的流属性。注意,应用流的区域的名称预加在流名称前面:

root@dcsw-79-168:~# flowadm show-flow
FLOW        LINK                IPADDR                   PROTO  LPORT   RPORT   DSFLD
backupzone/webzone-2-flow backupzone/net0 RMT:10.134.79.242/32   -- --  --      --
root@dcsw-79-168:~# flowadm show-flowprop backupzone/webzone-2-flow
FLOW         PROPERTY        VALUE          DEFAULT        POSSIBLE
backupzone/webzone-2-flow maxbw    50       --             -- 

现在再次从 webzone-2 运行 netperf 测试,如清单 15 所示。(我们知道 netserver 仍运行于 backupzone 中。)

清单 15:再次从 webzone-2 运行 netperf
root@dcsw-79-168:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-2:~# cd /shared/Netperf/
root@webzone-2:/shared/Netperf# ./netperf -H 10.134.79.243
MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.243 (10.134.79.243) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

128000  49152  49152    10.18      51.39   
root@webzone-2:/shared/Netperf# exit
logout

[Connection to zone 'webzone-2' pts/5 closed]

可以看到,我们已经将吞吐量限制为 50 Mb/秒,如流属性中所设置。

验证流控制不影响 webzone-1

作为最后一项测试,我们来看看从 webzone-1 执行同一测试情况如何,如清单 16 所示。(我们知道,netserver 仍运行于 backupzone 中。)

清单 16:从 webzone-1 运行 netperf
root@dcsw-79-168:~# zlogin webzone-1
[Connected to zone 'webzone-1' pts/5]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-1:~# cd /shared/Netperf/
root@webzone-1:/shared/Netperf# ./netperf -H 10.134.79.243 MIGRATED TCP STREAM TEST from ::ffff:0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.134.79.243 (10.134.79.243) port 0 AF_INET
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

128000  49152  49152    10.06     202.61   
root@webzone-1:/shared/Netperf# exit
logout

[Connection to zone 'webzone-1' pts/5 closed]

这次结果为 200 Mb/秒。从 webzone-1backupzone 的吞吐量不受对 backupzone 中的流应用的带宽限制的影响。这是因为远程 IP 地址与我们输入的值不匹配,因此不符合流的规则。

本节最后一步:停止 backupzone 中的 netserver,如清单 17 所示。

清单 17:停止 netserver
root@dcsw-79-168:~# zlogin backupzone
[Connected to zone 'backupzone' pts/5]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@backupzone:~# ps -ef | grep netserver
    root 20562 19383   0 09:53:49 ?           0:00 ./netserver
    root 20641 20636   0 10:10:53 pts/5       0:00 grep netserver
root@backupzone:~# kill 20562
root@backupzone:~# exit
logout

[Connection to zone 'backupzone' pts/5 closed]

总结

在本文中,我们了解了如何对数据链路和用户定义的流应用带宽限制来作为管理网络流量的一种方式。还了解了数据链路带宽如何限制通过该数据链路的所有流量,而应用于流的带宽限制可以基于网络数据包的特征。这些技术可以单独使用,也可以组合使用,因而您能够创建灵活的受控环境以满足网络资源管理的所有需要。

更多信息

下面是其他一些资源:

修订版 1.0,2011 年 11 月 4 日